/**
 * 头像数据处理工具函数
 * 用于解析后端返回的头像JSON字符串数据
 * 
 * @author Wu.Liang
 * @date 2025-01-30
 * @version 1.0.0
 */

/**
 * 头像数据接口
 */
export interface AvatarData {
  id?: string | number
  fileUrl?: string
  url?: string
  fileName?: string
  originalFileName?: string
  fileSize?: number
  fileType?: string
  filePath?: string
  fileExtension?: string
  uploadType?: string
  uploadSource?: string
  createTime?: string
  status?: string
}

/**
 * 解析头像数据
 * @param avatar 头像数据，可能是JSON字符串或对象
 * @returns 解析后的头像数据对象
 */
export function parseAvatarData(avatar: any): AvatarData | null {
  if (!avatar) {
    return null
  }

  try {
    // 如果是字符串，尝试解析为JSON
    if (typeof avatar === 'string') {
      return JSON.parse(avatar)
    }
    // 如果已经是对象，直接返回
    return avatar
  } catch (error) {
    console.warn('头像数据解析失败:', error)
    return null
  }
}

/**
 * 获取头像URL
 * @param avatar 头像数据
 * @returns 头像URL字符串
 */
export function getAvatarUrl(avatar: any): string | undefined {
  const avatarData = parseAvatarData(avatar)
  if (!avatarData) {
    return undefined
  }
  
  return avatarData.fileUrl || avatarData.url || avatar
}

/**
 * 获取头像文件名
 * @param avatar 头像数据
 * @returns 头像文件名
 */
export function getAvatarFileName(avatar: any): string {
  const avatarData = parseAvatarData(avatar)
  if (!avatarData) {
    return '用户头像'
  }
  
  return avatarData.fileName || avatarData.originalFileName || '用户头像'
}

/**
 * 获取头像文件大小
 * @param avatar 头像数据
 * @returns 头像文件大小
 */
export function getAvatarFileSize(avatar: any): number {
  const avatarData = parseAvatarData(avatar)
  if (!avatarData) {
    return 0
  }
  
  return avatarData.fileSize || 0
}

/**
 * 创建头像图片信息对象
 * @param avatar 头像数据
 * @param id 图片ID
 * @returns 头像图片信息对象
 */
export function createAvatarImageInfo(avatar: any, id: string = 'user-avatar'): any {
  const avatarData = parseAvatarData(avatar)
  if (!avatarData) {
    return null
  }
  
  return {
    id,
    fileUrl: avatarData.fileUrl || avatarData.url || avatar,
    fileName: avatarData.fileName || avatarData.originalFileName || '用户头像',
    fileSize: avatarData.fileSize || 0
  }
}
